Github OAuth 登录使用流程

2016-05-14 05:31

作者:给立乐*
出处:http://spencer-dev.com/2016/05/14/Github OAuth 登录使用流程
声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。

Github OAuth 登录的实现流程

最近在做 GitHub 相关的东西,需要一个登录的功能,所以总结下在实现过程中查的文档以及相关资料。把步骤以及一些小坑记录下来。

GitHub 认证

1. 申请认证

首先申请在 GitHub 申请一个 “Developer applications” 的权限。
地址:Developer application

2. 填写信息

填写好相关信息 “Application name”, “Homepage URL”, “Application descriptioin”, “Authorization callback URL”
Callback URL 前期可以随便填,后面等 Server 部署成功后,可以更改。

3. 完成 GitHub 部分

全部都填写完成并保存好 “Client ID” , “Client Secret” 后,开始下面步骤。


在本地安装 Heroku 工具

工具地址:heroku toolbelt
下载成功后,安装好。
Terminal 中输入:

1
$ heroku login

输入用户名和密码之后,会提示登陆成功。
本地工具就安装好了。


在 Heroku 创建 Application

打开网页版 Heroku ,打开后右上角有一个 + (加号) ,点击后弹出浮窗,然后继续点击 "create new app" ,在 "App Name(optional)" 中输入 app 的名字,然后点击 "Create App"
应用创建就成功了。


将应用 Clone 到本地

应用创建成功后,应该会自动跳转到 app 的 "Deploy" tab 中。页面下方有操作提示。

具体操作为:将应用 Clone 到本地,并进入本地项目目录。(命令如下)

1
2
$ heroku git:clone -a [刚刚创建的应用名]
$ cd [刚刚创建的应用名]

在本地配置 Ruby 的 WebServer 环境

文档地址:Sinatra

安装 Sinatra

Terminal 中执行以下语句即可安装。(有可能因为网络等问题很慢或失败,多等等或重新执行命令就好了。如果提示需要先安装其他东西,就按照提示安装,再重新执行该命令。)

1
sudo gem install sinatra

HelloWorld

先简单写一个小例子来看下

1
2
3
4
5
6
# HelloWorld.rb
require 'sinatra'
get '/' do
"Hello World!"
end

运行

编写完成后,把它运行起来。

1
$ ruby HelloWorld.rb

Sinatra 的默认端口是 4567
所以直接在浏览器中打开 http://localhost:4567 就能够看到我们熟悉的 “Hello World” 了。

停止运行

停止运行就在 Terminal 中直接按 control + c 就可以了。


Heroku + Ruby 部署 Server

部署和编写 Server 使用 Ruby 语言进行。(用过之后发现 Ruby 做 Web 相关的东西真是方便。。)

使用 GitHub 中已有的开源项目

项目地址:github/pltform-samples/…/…/basics-of-authentication
将项目 Clone 到本地。

  1. 将 Clone 下来的文件,复制到刚刚创建的本地项目文件夹中。
    路径为:/platform-samples/api/ruby/basics-of-authentication/

配置环境变量

  1. 在本地项目目录中打开 advanced_server.rb
    可以看到 “GH_BASIC_CLIENT_ID” 和 “GH_BASIC_SECRET_ID”,这两个东西对应到 GitHub 上,就是刚刚申请 “Developer application” 时,成功后的返回的结果。
    advanced_server.rb 中的提示说,不要把 “CLIENT_ID” 和 “SECRET_ID” hard-coded 到这里。说推荐配置到环境变量中,那咱就搞起来。

  2. 将 “CLIENT_ID” 和 “SECRET_ID” 配置到 Heroku 的环境变量中。
    文档地址:Setting up config vars for a deployed application
    在本地项目目录中执行以下命令:

    1
    2
    3
    4
    5
    6
    7
    8
    # 设置 CLIENT_ID
    $ heroku config:set GH_BASIC_CLIENT_ID=xxxxxxx
    # 设置 SECRET_ID
    $ heroku config:set GH_BASIC_SECRET_ID=zzzzzzz
    # 打印出设置的变量
    $ heroku config

环境变量配置完成。

添加 Config.ru 文件

  1. 在本地项目目录中添加 Config.ru 文件。
    1
    2
    require './advanced_server'
    run Sinatra::Application

安装 Server 所需依赖

Config.ru 文件编写并保存完后,现在需要安装 Server 所需的依赖。

在本地项目目录执行。

1
$ bundle install

中间可能会报错,提示需要先安装其他依赖,按照提示安装后,重新运行此命令即可。

推送本地修改到 Heroku

执行 Git 命令进行推送。

1
2
3
4
5
6
7
8
9
$ git add .
$ git commit -m"init"
# remote name 是 heroku
$ git push heroku master
# 在浏览器中打开项目的 root url
$ heroku open

这时候在浏览器中可以看到项目的 web page 。

如何定位错误,查看 Log

线上查看 log
1
$ heroku logs

这个命令可以直接查看线上运行时 log 。

在本地运行,查看 log。
1
$ ruby advanced_server.rb

运行起来后,在本地访问 http://localhost:4567 地址。如果出错,Terminal 中和网页中都能够直接看到错误。

根据错误查找对应解决办法即可。


参考文档:

GitHub Developer OAuth - non-web-application-flow
Getting Started with Ruby on Heroku
Deploying Rack-based Apps
Sinatra Getting Started
NoMethodError: undefined method `join’ for # - Rack 1.6.0
Ruby 环境变量
Setting up config vars for a deployed application


Comments: